﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Security.Cryptography;
using LCTMoodle.Models.ViewModels;
using LCTMoodle.Models.DataModels;
using LCTMoodle.Service;
using LCTMoodle.Helper;

namespace LCTMoodle.Controllers
{
    public class NguoiDungController : Controller
    {
        #region Chưa làm
        #region KhoaHoc_KhungThemThanhVien
        /// <summary>
        /// Lấy các người dùng theo thông tin
        /// Các người dùng đó không phải là thành viên của khóa học
        /// </summary>
        /// <param name="form">Cần trường "ThongTin" và "MaKhoaHoc"</param>
        /// <returns></returns>
        public JsonResult KhoaHoc_KhungThemThanhVien_TimNguoiDung(FormCollection form)
        {
            List<NguoiDungViewModel> nguoiDung = NguoiDungService.layNguoiDungTheoThongTinVaChuaVaoKhoaHoc(form["ThongTin"], Convert.ToInt32(form["MaKhoaHoc"]));

            //Kiểm tra nếu lấy dữ liệu thất bại
            if (nguoiDung == null)
            {
                return Json(new
                    {
                        trangThai = "Lấy người dùng thất bại"
                    });
            }

            return Json(new
                {
                    trangThai = "OK",
                    ketQua = ControllerHelper.RenderRazorViewToString("~/Views/NguoiDung/KhoaHoc_KhungThemThanhVien_TimNguoiDung", nguoiDung)
                });
        }
        #endregion

        #region Thêm người dùng hàng loạt
        /// <summary>
        /// Thêm người dùng hàng loạt
        /// </summary>
        /// <returns></returns>
        public ActionResult ThemNguoiDungHangLoat()
        {
            string s = NguoiDungService.layTenTruongNguoiDung();
            
            string[] tenTruongNguoiDung;
            tenTruongNguoiDung = s.Split(Convert.ToChar("|"));
            return PartialView(tenTruongNguoiDung);
        }
        #endregion Thêm người dùng hàng loạt
        #endregion Chưa làm

        #region Đổi mật khẩu
        /// <summary>
        /// View đổi mật khẩu
        /// </summary>
        /// <returns></returns>
        public JsonResult DoiMatKhau()
        {
            #region Kiểm tra quyền
            if (!TienIch.daDangNhap())
            {
                return Json(new
                {
                    trangThai = "Chưa đăng nhập (Đổi mật khẩu)"
                });
            }
            #endregion Kiểm tra quyền

            return Json(new
                {
                    trangThai = "OK",
                    ketQua = ControllerHelper.RenderRazorViewToString("~/Views/NguoiDung/DoiMatKhau.cshtml")
                });
        }
        /// <summary>
        /// Xử lý đổi mật khẩu
        /// </summary>
        /// <param name="form">Gồm thông tin mật khẩu mới và cũ</param>
        /// <returns></returns>
        public ActionResult XuLyDoiMatKhau(FormCollection form)
        {
            #region Kiểm tra quyền
            if (!TienIch.daDangNhap())
            {
                TempData["ThongBao"] = new string[]
                {
                    "Chưa đăng nhập (Xử lý đổi mật khẩu)"
                };
                return RedirectToAction("Index", "TrangChu");
            }
            #endregion Kiểm tra quyền
            #region Kiểm tra thông tin
            if (form["MatKhauCu"] == "" || form["MatKhauMoi"] == "")
            {
                TempData["ThongBao"] = new string[]
                {
                    "Chưa đủ thông tin (Xử lý đổi mật khẩu)"
                };
                return RedirectToAction("Index", "TrangChu");
            }
            #endregion Kiểm tra thông tin

            //Khai báo lớp mã hoá MD5
            MD5 md5Hash = MD5.Create();

            NguoiDungViewModel nguoiDung = NguoiDungService.layNguoiDungTheoMaNguoiDung(((NguoiDungViewModel)Session["NguoiDung"]).ma);

            //Kiểm tra nếu lấy dữ liệu thất bại
            if (nguoiDung == null)
            {
                TempData["ThongBao"] =
                    new string[]
                    {
                        "Đổi mật khẩu thất bại"
                    };
                return RedirectToAction("Index", "TrangChu");
            }

            if (TienIch.KiemTraMaHoa(md5Hash, form["MatKhauCu"], nguoiDung.matKhau))
            {
                //Cập nhật mật khẩu theo mật khẩu mới
                NguoiDungService.capNhatMatKhauTheoMaNguoiDung(nguoiDung.ma, TienIch.MaHoaMD5(md5Hash, form["MatKhauMoi"].ToString()));
                nguoiDung.matKhau = TienIch.MaHoaMD5(md5Hash, form["MatKhauMoi"].ToString());

                //Cập nhật lại người dùng khi đổi mật khẩu
                Session["NguoiDung"] = nguoiDung;
                
                TempData["ThongBao"] =
                    new string[]
                    {
                        "Đổi mật khẩu thành công",
                        "Tot"
                    };
                return RedirectToAction("Index", "KhoaHoc");
            }
            else
            {   
                //Mật khẩu sai
                TempData["ThongBao"] =
                    new string[]
                    {
                        "Mật khẩu cũ chưa đúng"
                    };
                return RedirectToAction("Index", "TrangChu");
            }
        }
        #endregion Đổi mật khẩu

        #region Lấy loại người dùng để load vào Combobox
        public PartialViewResult KhoaHoc_TaoKhoaHoc_GiangVien()
        {
            //Lấy giảng viên (mã loại người dùng = 1)
            List<NguoiDungViewModel> giangVien = NguoiDungService.layNguoiDungTheoMaLoaiNguoiDung(1);

            return PartialView(model: giangVien);
        }
        #endregion

        #region Kiểm tra tên đăng nhập tồn tại
        public ContentResult KiemTraTenDangNhapHopLe(string tenDangNhap)
        {
            NguoiDungViewModel nguoiDung = NguoiDungService.layNguoiDungTheoTenDangNhap(tenDangNhap);
            //Lấy người dùng theo tên đăng nhập để xem có không
            if (nguoiDung == null)
            {
                //Không có => OK
                return Content("OK");
            }

            return Content("Tên đăng nhập đã tồn tại");
        }
        #endregion Kiểm tra tên đăng nhập tồn tại

        #region Kiểm tra email tồn tại
        public ContentResult KiemTraEmailHopLe(string email)
        {
            NguoiDungViewModel nguoiDung = NguoiDungService.layNguoiDungTheoEmail(email);

            //Lấy người dùng theo email để xem có không
            if (nguoiDung == null)
            {
                //Không có => OK
                return Content("OK");
            }

            return Content("Email đã tồn tại");
        }
        #endregion Kiểm tra email tồn tại

    }
}